#include<stdio.h>

//二分查找
int binary(int arr[], int size, int key) {
	int left = 0;
	int right = size - 1;
	while (left <= right) {
		int mid = (left + right) / 2;
		if (arr[mid] == key) {
			return mid;
		}
		else if (arr[mid] > key) {
			right = mid - 1;
		}
		else {
			left = mid + 1;
		}
	}

	return -1;
}

//int num_of_1(int n) {
//	int count = 0;
//	for (int i = 0; i < 32; ++i) {
//		if (((n >> i) & 1) == 1)
//			count++;
//	}
//
//	return count;
//}


int num_of_1(int n) {
	int count = 0;
	while (n) {
		n = n & (n - 1);
		count++;
	}

	return count;
}

//两个整数二进制位不同个数
//#include <stdio.h>
//
//int NumberOf1(int n) {
//	int count = 0;
//	for (int i = 0; i < 32; ++i) {
//		if ((n >> i) & 1 == 1)
//			count++;
//	}
//	return count;
//}
//
//int main() {
//	int m, n;
//	scanf("%d %d", &m, &n);
//	int ret = 0;
//
//	ret = NumberOf1(m ^ n);
//
//	printf("%d\n", ret);
//	return 0;
//}

//int main(){
//	int n = 0;
//	scanf("%d", &n);
//	for (int i = 31; i >= 1; i -= 2) {
//		printf("%d ", (n >> i) & 1);
//	}
//	printf("\n");
//	for (int i = 30; i >= 0; i -= 2) {
//		printf("%d ", (n >> i) & 1);
//	}
//	return 0;
//}

//int main() {
//	//int arr[] = {0,1,2,3,4,5,6,7,8,9};
//
//	//printf("%d \n", binary(arr, sizeof(arr), 1));
//	int m = 1999, n = 2299;
//	printf("%d\n", num_of_1(m ^ n));
//
//	return 0;
//}


//int main() {
//	int a = 10;
//	int b = 20;
//	printf("a: %d  b: %d\n", a, b);
//	a = a ^ b;
//	b = a ^ b;
//	a = a ^ b;
//	printf("a: %d  b: %d\n", a, b);
//	return 0;
//}

//int main() {
//	int a = 5;
//	int n = 5;
//
//	int sum = 0;
//	int tmp = 0;
//
//	for (int i = 0; i < n; ++i) {
//		tmp = a * 10 + a;
//		sum += tmp;
//	}
//
//	printf("%d\n", sum);
//	return 0;
//}


void check_sys() {

	int a = 1;

	if (*(char*)&a == 1) {
		printf("小端");
	}
	else {
		printf("大端");
	}
}

//int main() {
//	check_sys();
//
//	return 0;
//}
//int main() {
//	//char a = -128;
//
//	//y  10000000 00000000 00000000 10000000
//	//f  11111111 11111111 11111111 01111111
//	//b  11111111 11111111 11111111 10000000
//
//	//jd 10000000
//
//	//ts 11111111 11111111 11111111 10000000
//
//
//	char a = 128;
//
//	//y  00000000 00000000 00000000 10000000
//	//jd 10000000
//
//	//ts 11111111 11111111 11111111 10000000
//
//	printf("%u\n", a);
//	return 0;
//}

#include<string.h>


//int main() {
//	char a[1000];
//	int i;
//	for (int i = 0; i < 1000; i++) {
//		a[i] = -1 - i;
//	}
//
//	printf("%d", strlen(a));
//	return 0;
//}

//{{1}，{1,2,1}， {1,3,3,1} ... };
void yangHuiTriangle(int n) {
	int arr[30][30] = { 1 };

	//列
	for (int i = 0; i < n; ++i) {
		arr[i][0] = 1;
		//行
		for (int j = 1; j <= i; ++j) {
			arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
		}
	}

	//打印
	for (int i = 0; i < n; ++i) {
		for (int j = 0; j <= i; ++j) {
			printf("%d ", arr[i][j]);
		}
		putchar('\n');
	}
}


int main() {
	yangHuiTriangle(10);
	return 0;
}
//     1
//    1 2 1
//  1  3 3  1
//1  4  6  4  1